const express = require('express');
const multer = require('multer');
const fs = require('fs');
const mysql = require('mysql')
const path = require('path');
const router = express.Router();

// 配置 multer 存储选项
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/'); // 文件保存的目录
    },
    filename: function (req, file, cb) {
        cb(null, Date.now() + path.extname(file.originalname)); // 文件名
    }
});

// 创建 multer 实例
const upload = multer({
    storage: storage,
    limits: { fileSize: 1000000 }, // 限制文件大小（1MB）
    fileFilter: function (req, file, cb) {
        checkFileType(file, cb);
    }
});

// 检查文件类型
function checkFileType(file, cb) {
    const filetypes = /jpeg|jpg|png|gif/;
    const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
    const mimetype = filetypes.test(file.mimetype);

    if (mimetype && extname) {
        return cb(null, true);
    } else {
        cb('Error: Images Only!');
    }
}

// 链接数据库
const address = require('../MySql/index')
const sql = mysql.createConnection(address.mysql);
sql.connect(function (err) {
    if (err) {
        console.log(err)
    } else {
        console.log('链接成功')
    }
})

// 获取文件信息
// 根据文件ID返回文件供前端下载
router.get('/download', (req, res) => {
    const fileId = req.params.id;

    if (!fileId) {
        return res.status(400).json({ message: '文件ID不能为空' });
    }

    sql.query('SELECT id, filename FROM files WHERE id = ?', [fileId], (err, results) => {
        if (err) {
            console.error('Error executing query:', err);
            return res.status(500).json({ error: 'Internal Server Error' });
        }

        if (results.length === 0) {
            return res.status(404).json({ message: '文件未找到' });
        }

        const file = results[0];
        res.setHeader('Content-Type', file.mimetype);
        res.setHeader('Content-Disposition', `attachment; filename="${file.filename}"`);
        res.send(file.filedata);
    });
});

// 上传文件并存储到数据库
router.post('/upload', upload.single('file'), (req, res) => {
    console.log('文件上传成功', req.file)
    if (!req.file) {
        return res.status(400).json({ message: '文件上传失败' });
    }
    const filePath = req.file.path;
    const fileBuffer = fs.readFileSync(filePath);

    // 插入文件信息到数据库
    sql.query(
        'INSERT INTO files (filename, filedata, mimetype, size) VALUES (?, ?, ?, ?)',
        [req.file.originalname, fileBuffer, req.file.mimetype, req.file.size],
        (err, results) => {
            if (err) {
                console.error('Error inserting file:', err);
                res.status(500).json({ error: 'Internal Server Error' });
            } else {
                // 删除临时文件
                fs.unlinkSync(filePath);

                let data = {
                    code: 200,
                    data: {
                        id: results.insertId,
                        filename: req.file.originalname,
                        mimetype: req.file.mimetype,
                        size: req.file.size
                    },
                    message: '文件上传成功'
                };
                res.status(200).json(data);
            }
        }
    );
    
});
module.exports = router